#ifndef _COMMON_H_
#define _COMMON_H_

#include <GL/glew.h>

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_ttf.h>

#include <glm/glm.hpp>
#include <glm/gtc/random.hpp>
#include <glm/gtx/rotate_vector.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/quaternion.hpp>
#include <glm/gtc/type_ptr.hpp>

#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>

#define ENGINE_NAME_STRING "UnlintEngine"
#define ENGINE_NAME_WSTRING L"UnlintEngine"

#define ENGINE_VERSION_STRING "V. 0.0.1"
#define ENGINE_VERSION_WSTRING L"V. 0.0.1"
#define SPECIFIC 

#define IS_OPEN_BIT(val,mask) (val & mask)
#define SET_OPEN_BIT(val,mask) (val |= mask)
#define SET_CLOSE_BIT(val,mask) (val = val &~ mask)

//将一些代码打包成为一个事件函数
//引擎使用的事件函数没有返回值且没有参数
//若需要传递参数的事件函数应当使用代理
//代理的描述参见type.h
#define UPackCodesToEventFunc(RetType,Codes, ...) [__VA_ARGS__]()->RetType { Codes; }

#endif